package com.xz.java;

import com.xz.circle.CircleLinkedList;
import com.xz.circle.CircleLinkedList2;
import com.xz.circle.SingleCircleLinkedList;
import com.xz.single.SingleLinkedList2;
import org.junit.Test;

/**
 * @author XZ
 * @create 2021-04-19 10:02
 */
public class test {
    @Test
    public void test1() {
        List<Integer> list = new SingleLinkedList2<>();

        list.add(2);
        list.add(3);
        list.add(0, 10);
        list.add(1, 20);
        list.add(2, 30);
        list.add(3, 40);
        list.add(list.size(), 40);
        list.remove(1);
        System.out.println(list);
    }

    @Test
    public void test2() {
        ArrayList2<Integer> list = new ArrayList2<>();
        for (int i = 0; i < 50; i++) {
            list.add(i);
        }

        for (int i = 0; i < 50; i++) {
            list.remove(0);
        }
        System.out.println(list);
    }

    @Test
    public void test3() {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(0, 0);
        list.add(1, 1);
        list.add(list.size, 200);
        list.remove(0);
        list.remove(1);
        list.remove(list.size);
        System.out.println(list.toString());
    }


    @Test
    public void test4() {
        SingleCircleLinkedList<Integer> list = new SingleCircleLinkedList<>();
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(0, 0);
        list.add(1, 1);
        list.add(list.size, 200);
        list.remove(0);
        list.remove(1);
        list.remove(list.size - 1);
        System.out.println(list.toString());
    }

    @Test
    public void test5() {
        CircleLinkedList<Integer> list = new CircleLinkedList<>();
        list.add(10);
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(0, 0);
        list.add(1, 1);
        list.add(list.size, 200);
        list.remove(0);
        list.remove(1);
        list.remove(list.size - 1);
        System.out.println(list.toString());
    }

    /**
     * 约瑟夫问题
     */
    @Test
    public void test6() {
        josephus();
    }

    static void josephus() {
        CircleLinkedList2<Integer> list = new CircleLinkedList2<>();
        for (int i = 1; i <= 8; i++) {
            list.add(i);
        }
        list.reset();//指向头节点（指向1）
        while (!list.isEmpty()) {
            list.next();
            list.next();
            System.out.println(list.remove());
        }
    }


}
